// 定义常量保存服务端端口的基础地址，有利于后期修改
const wurl = 'http://phpclub.org.cn:8080/api';
// 配置
($.cookie)&&($.cookie.json = 'true');
// 获取用户信息
let userInfo = null;
($.cookie)&&(userInfo = $.cookie('user'));
// 实现页面顶部的用户信息
$(()=>{
    // 导航菜单效果
    $('.cat').hover(function(){
        $(this).find('.cat_detail').show();
        $(this).find('h3').addClass('on');
    },function(){
        $(this).find('.cat_detail').hide();
        $(this).find('h3').removeClass('on');
    });

    // 非首页，导航菜单显隐效果
    $('.cat1').hover(function(){
        $('.cat1 .cat_hd').addClass('on').removeClass('off');
        $('.cat1 .cat_bd').show();
    },function(){
        $('.cat1 .cat_hd').addClass('off').removeClass('on');
        $('.cat1 .cat_bd').hide();
    })


    userInfo?$('.topnav_right>ul>li').eq(0).html(`<li>您好，${userInfo.nickname}欢迎来到京西！[<a href="javascript:;" class="exitLogin">退出</a>]</li>`):'';
    $('.exitLogin').on('click',()=>{
        $.removeCookie('user', { path: '/' });
        location.reload();
    })
});
if(userInfo){

}else{

}












/**
 * 获取到URL地址上指定的参数信息
 * @param {String} key 参数名称
 */
 function getUrlParam(key){
    let returnValue = '';
    location.search.substr(1).split('&').forEach(item=>{
        // item 表示 cookie的名称与值
        let keyValue = item.split('=');
        if(keyValue[0] == key){
            returnValue = keyValue[1];
        }
    })
    return returnValue;
}

































































/**
 * 设置cookie操作
 * @param {String} key  cookie的名称 
 * @param {String} value cookie的值 要求为字符串格式
 * @param {Number} expires 有效时间 传递整数 表示多少秒之后过期 
 * @param {String} path 生效路径 
 */
function setCookie(key,value,expires=0,path='/'){
    // 关闭浏览器失效
    if(expires == 0){
        document.cookie  = `${key}=${value};path=${path}`;
        return;
    }
    let d = new Date();
    // 计算过期的时间
    d.setTime(d.getTime()-8*3600*1000 + expires * 1000);
    document.cookie = `${key}=${value};expires=${d};path=${path}`;
}
/**
 * 删除cookie
 * @param {String} key  cookie的名称 
 * @param {String} path 生效路径 
 */
function removeCookie(key,path='/'){
    setCookie(key,'',-1,path);
}
/**
 * 获取cookie
 * @param {String} key  cookie的名称 
 * @return String
 */
function getCookie(key){
    let returnValue = false;
    document.cookie.split('; ').forEach(item=>{
        // item 表示 cookie的名称与值
        let keyValue = item.split('=');
        if(keyValue[0] == key){
            returnValue = keyValue[1];
        }
    })
    return returnValue;
}

/**
 * 封装ajax请求函数
 * @param {Object} options 表示请求的相关的信息 
 */
function ajax(options){
    // 1、默认配置
    let config = {
        type:'get',//请求方式
        url:'',//请求地址
        data:{},//请求过程中携带的数据 可以支持字符串与对象格式
        dataType:'json',//返回数据的格式
        success:function(){ //成功获取结果的回调
        }
    };
    // 2、合并参数
    for(let key in config){
        // 判断用户在调用ajax时有没有传递 options[key]元素 如果传递了接就覆盖config下的元素
        options[key] && (config[key] = options[key]);
    }
    // 3、需要针对每一个配置信息进行格式的校验
    // 3.1、验证type参数是否正确，要求只能是get、或者post、或者put、或者delete
    // 先将type元素转换为小写
    config.type = config.type.toLowerCase();
    if(!['get','post','put','delete'].includes(config.type)){
        throw new Error('请求方式错误');
    }
    // 3.2、验证url参数 要求必须传递即可
    if(!config.url){
        throw new Error('URL地址必须传递');
    }
    // 3.3、验证data参数 只能是字符串或者对象
    if(Object.prototype.toString.call(config.data) != '[object String]' && Object.prototype.toString.call(config.data) != '[object Object]'){
        throw new Error('请求参数类不合法');
    }
    // 3.4、验证success 必须是函数
    if(Object.prototype.toString.call(config.success) != '[object Function]'){
        throw new Error('回调格式错误');
    }

    let data = '';//保存参数信息
    // 提取参数信息
    if(Object.prototype.toString.call(config.data) == '[object String]'){
        data = config.data;
    }else{
        // Object.keys提取对象下的属性组成一个新数组  forEach中item就表示每一个元素的值(即对象下的属性)
        Object.keys(config.data).forEach(item=>{
            // 拼接参数 要求格式为'名称=值&名称=值'
            data+=`${item}=${config.data[item]}&`;
        })
        // 字符串截取截掉最后一个&
        data = data.slice(0,-1);
    }

    // 请求url地址
    let url = config.url;
    if(config.type == 'get' || config.type == 'delete'){
        // url地址后携带参数
        url+='?'+data;
    }
    // 4、获取Ajax对象
    let xhr = new XMLHttpRequest;
    // 5、打开连接
    xhr.open(config.type,url);
    // 设置请求头
    xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    // 6、发送请求
    let body = null;//请求体中参数
    if(config.type == 'post'||config.type=='put'){
        body = data
    }
    xhr.send(body);
    // 7、监听状态改变
    xhr.onreadystatechange = function(){
        if(xhr.status == 200 && xhr.readyState == 4){
            // 得到服务端结果
            // response就是服务端返回的结果，如果返回结果是JSON格式 response就是对象
            let response = (config.dataType == 'json')?JSON.parse(xhr.responseText):xhr.responseText;
            // 此次得到服务端返回的结果 具体结果应该怎么处理 封装ajax的人无法决定
            // response.data.forEach(item=>{

            // })
            // 实参传递服务端响应结果
            config.success(response);
        }
    }
}

/**
 * 获取到URL地址上指定的参数信息
 * @param {String} key 参数名称
 */
function getUrlParam(key){
    let returnValue = '';
    location.search.substr(1).split('&').forEach(item=>{
        // item 表示 cookie的名称与值
        let keyValue = item.split('=');
        if(keyValue[0] == key){
            returnValue = keyValue[1];
        }
    })
    return returnValue;
}